package com.lw.cust;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @author LW
 * @2020/10/2 15:41
 */
//方式三：使用注解实现！
//使用注解标注这个类是一个切面
@Aspect
@Component
public class AnnotationAspect {

    @Pointcut("execution(* com.lw.service.UserServiceImpl.*(..))")
    public void pointcut1() {
    }

    @Before("pointcut1()")
    public void before(){
        System.out.println("=============方法执行前============");
    }

    @After("pointcut1()")
    public void after(){
        System.out.println("=============方法执行后============");
    }
    //在环绕增强中，我们可以给定一个参数，代表我们要获取处理切入的点
    @Around("pointcut1()")
    public void around(ProceedingJoinPoint jp) throws Throwable {//JoinPoint连接点：与切入点匹配的执行点
        System.out.println("环绕前");

        //执行方法
        Object proceed = jp.proceed();

        System.out.println("环绕后");


//        Signature signature = jp.getSignature();//获取签名
//        System.out.println("signature:"+signature);signature:void com.lw.service.UserService.add()
//        System.out.println(proceed);null

    }
}
